home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume17 / calentool / part12 < prev    next >
Encoding:
Internet Message Format  |  1991-04-06  |  54.9 KB

  1. From: billr@saab.CNA.TEK.COM (Bill Randle)
  2. Newsgroups: comp.sources.misc
  3. Subject: v17i093:  calentool - day/week/month/year-at-a-glance SunView tool, Part12/23
  4. Message-ID: <1991Apr6.024009.17225@sparky.IMD.Sterling.COM>
  5. Date: 6 Apr 91 02:40:09 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7. X-Checksum-Snefru: 23134164 bc625fbb 6f14ac92 ae36ed8d
  8.  
  9. Submitted-by: Bill Randle <billr@saab.CNA.TEK.COM>
  10. Posting-number: Volume 17, Issue 93
  11. Archive-name: calentool/part12
  12.  
  13. #! /bin/sh
  14. # This is a shell archive.  Remove anything before this line, then unpack
  15. # it by saving it into a file and typing "sh file".  To overwrite existing
  16. # files, type "sh file -c".  You can also feed this as standard input via
  17. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  18. # will see the following message at the end:
  19. #        "End of archive 12 (of 23)."
  20. # Contents:  dates/literature holidays.c month.cursor notify.c
  21. # Wrapped by billr@saab on Thu Mar 28 08:38:23 1991
  22. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  23. if test -f 'dates/literature' -a "${1}" != "-c" ; then 
  24.   echo shar: Will not clobber existing file \"'dates/literature'\"
  25. else
  26. echo shar: Extracting \"'dates/literature'\" \(7284 characters\)
  27. sed "s/^X//" >'dates/literature' <<'END_OF_FILE'
  28. X# CalenTool V2.2 - nflag=1 range=1,12 - DO NOT REMOVE THIS LINE
  29. X# $Header: literature,v 1.2 91/03/07 16:21:13 billr Exp $
  30. X# Special dates in the history of literature, newspapers and comics.
  31. X# Today in History dates provided by Robert Heckendorn at
  32. X# Hewlett-Packard in Fort Collins, Colorado.
  33. X# Any corrections or additions may be sent to robert@fc.hp.com
  34. X#
  35. X# Additional dates provided from ProLine's today file
  36. X#
  37. X# Converted to calentool format by Larry Virden (lwv27%cas.BITNET@CUNYVM.CUNY.Edu)
  38. X# and further edited and merged by Bill Randle (billr@saab.cna.tek.com).
  39. X#
  40. X** 01 07 99 99 00 "Tarzan", one of the first adventure comic strips appears. (1929)
  41. X** 01 07 99 99 00 Buck Rogers and Tarzan first appear in comic strips (1929)
  42. X** 01 09 99 99 00 First issue of the "Progressive" magazine (1909)
  43. X** 01 10 99 99 00 Thomas Paine publishes "Common Sense" (1776)
  44. X** 01 22 99 99 00 The Alta California becomes a daily paper, 1st such in Calif. (1850)
  45. X** 02 13 99 99 00 "Prince Valiant" comic strip appears; known for historical detail and fine detail drawing. Thanks Hal (1937)
  46. X** 02 13 99 99 00 Blondie and Dagwood get married (1933)
  47. X** 02 16 99 99 00 Ladies Home Journal begins publication. (1883)
  48. X** 02 18 99 99 00 Mark Twain's "Adventures of Huckleberry Finn" is published (1885)
  49. X** 03 02 99 99 00 Time magazine is first published (1923)
  50. X** 03 06 99 99 00 "The Philosophical Transactions of the Royal Society" was 1st published, and is still published today (1665)
  51. X** 03 16 99 99 00 First Black newspaper founded (1827)
  52. X** 04 09 99 99 00 TV Guide publishes their first issue. (1953)
  53. X** 04 10 99 99 00 First issue of the New York Tribune. The publisher was Horace Greeley (1841)
  54. X** 04 14 99 99 00 The first edition of Noah Webster's "American Dictionary of the English Language" was published (1828)
  55. X** 04 16 99 99 00 The Book of the Month Club begins in the US (1926)
  56. X** 04 18 99 99 00 the first crossword puzzle book is published (1924)
  57. X** 04 24 99 99 00 First publication of U.S. newspaper printed on regular basis (1704)
  58. X** 04 27 99 99 00 John Milton sells his rights to "Paradise Lost" for a total of 10 pounds (1667)
  59. X** 05 05 99 99 00 The first issue of Soviet Communist Party paper Pravda was published (1912)
  60. X** 05 09 99 99 00 The first newspaper cartoon appeared in America. (1754)
  61. X** 05 17 99 99 00 the first regular comic, "Comic Cuts", is published in London (1890)
  62. X** 05 29 99 99 00 Popeye rubs the Wiffle Hen becoming practically indestructible (1929)
  63. X** 06 03 99 99 00 "Casey at the Bat" is 1st published (by the SF Examiner) (1888)
  64. X** 06 05 99 99 00 "U.S. Today" (a newspaper) ran for 1st time (1981)
  65. X** 06 06 99 99 00 George Orwell's novel "1984" is published (1949)
  66. X** 06 09 99 99 00 The first dime novel was published -- "Malaeska: The Indian Wife of the White Hunter" (1860)
  67. X** 06 13 99 99 00 "Pentagon Papers" (re: Vietnam); first published in New York Times. (1971)
  68. X** 06 19 99 99 00 Garfield the cat. "Big fat hairy deal". (1978)
  69. X** 06 20 99 99 00 Krazy Kat cartoon strip first appears (1910)
  70. X** 06 29 99 99 00 The London Telegraph is published for the first time (1855)
  71. X** 06 30 99 99 00 "Gone with the Wind" is published (1936)
  72. X** 07 04 99 99 00 Thoreau moves into his shack on Walden Pond. (1845)
  73. X** 07 06 99 99 00 Newton publishes Principia Mathematica (1687)
  74. X** 07 08 99 99 00 Vol 1, No 1, of "The Wall Street Journal" published. (1889)
  75. X** 07 25 99 99 00 Das Kapital by Karl Marx is published (1867)
  76. X** 07 27 99 99 00 Billboard magazine starts publishing best-seller's charts. (1940)
  77. X** 07 30 99 99 00 1st English newspaper published in Hawaii. (1836)
  78. X** 08 07 99 99 00 the Alley Oop cartoon strip first appears (1933)
  79. X** 08 13 99 99 00 Li'l Abner debut (1934)
  80. X** 08 14 99 99 00 Henry David Thoreau jailed for tax resistance. (1846)
  81. X** 08 14 99 99 00 The first book ever published was printed, The Book of Psalms, published by Faust (1457)
  82. X** 08 17 99 99 00 Animal Farm, written by George Orwell, first published (1945)
  83. X** 08 22 99 99 00 Ann Franklin becomes the first woman editor of an American newspaper, "The Mercry" in Newport, R.I. (1762)
  84. X** 08 27 99 99 00 "Tarzan of the Apes" published (1912)
  85. X** 08 30 99 99 00 Mary Shelley, wrote Frankenstein (1797)
  86. X** 09 04 99 99 00 1st daily newspaper in Hawaii published. (1866)
  87. X** 09 04 99 99 00 Barney Flaherty, a ten year old, was hired as the first known paper boy (1833)
  88. X** 09 05 99 99 00 On The Road, by author Jack Kerouac, was first published. (1957)
  89. X** 09 06 99 99 00 Thoreau leaves Walden Pond (1847)
  90. X** 09 19 99 99 00 President George Washington's farewell address was published. (1796)
  91. X** 09 21 99 99 00 1st daily newspaper in US begins publication in Pennsylvania. (1784)
  92. X** 09 21 99 99 00 Eleanor John publishes the first Weekly Reader (1928)
  93. X** 09 25 99 99 00 One of the earliest American newspapers "Publick Occurrences", published its first and last edition in Boston (1690)
  94. X** 09 27 99 99 00 James Franklin, Benjamin's half brother, publishes the first issue of "The Rhode Island Gazette" (1727)
  95. X** 09 28 99 99 00 "Pilgrim's Progress" published (1678)
  96. X** 09 30 99 99 00 Bill the Cat loses control of his sports car on route 66 outside of Bloom County. He was returning from a party at Mary Worth's LA home. (1983)
  97. X** 10 02 99 99 00 First publication of the Peanuts comic strip (1950)
  98. X** 10 04 99 99 00 Dick Tracy, created by Chester Gould, debuts (1931)
  99. X** 10 10 99 99 00 Catch-22 is published (1961)
  100. X** 10 16 99 99 00 Gordo (by Gus Arriola) 1st appeared in newspapers. (1941)
  101. X** 10 16 99 99 00 audience in Boston walks out on Poe during his reading of the "The Raven" (1845)
  102. X** 10 20 99 99 00 The New York Times is first published simultaneously in Paris and New York (1960)
  103. X** 10 26 99 99 00 the "Doonesbury" comic strip debuts in 28 newspapers (1970)
  104. X** 10 27 99 99 00 The 'Federalist' letters started appearing in NY newspapers. (1787)
  105. X** 11 03 99 99 00 Treasure Island, by Robert Louis Stevenson, published (1883)
  106. X** 11 05 99 99 00 Lemuel Gulliver arrives in Lilliput (1699)
  107. X** 11 14 99 99 00 "Moby Dick", by Herman Melville, is published. (1851)
  108. X** 11 15 99 99 00 The cartoon strip Mutt and Jeff first appeared (1907)
  109. X** 11 18 99 99 00 Mark Twain (Samuel Clemens) publishes his first work, "Jim Smiley and His Jumping Frog" (1865)
  110. X** 11 23 99 99 00 The first issue of "Life" magazine is published (1936)
  111. X** 11 26 99 99 00 Alice Liddel receives an early Christmas present of "Alice in Wonderland" from Charles Dodgson (1864)
  112. X** 11 29 99 99 00 The London times is first newspaper published with a steam powered press (1814)
  113. X** 12 09 99 99 00 Noah Webster establishes New York's 1st daily newspaper. (1793)
  114. X** 12 16 99 99 00 "Variety", covering all phases of show business, 1st published. (1905)
  115. X** 12 19 99 99 00 "A Christmas Carol" by Charles Dickens is first published (1843)
  116. X** 12 19 99 99 00 Benjamin Franklin begins publication of "Poor Richard's Almanack" (1732)
  117. X** 12 19 99 99 00 Thomas Paine publishes his first "American Crisis" essay in which he wrote, "These are the times that try men's souls." (1776)
  118. X** 12 21 99 99 00 Phineas Fogg completes trip around world in under 80 days
  119. X** 12 23 99 99 00 "Twas the night before Christmas ..." was first published (1823)
  120. X** 12 23 99 99 00 Tom Paine publishes "Crisis" (1776)
  121. X** 12 25 99 99 00 Dick Tracy marries Tess Truehart (1949)
  122. END_OF_FILE
  123. if test 7284 -ne `wc -c <'dates/literature'`; then
  124.     echo shar: \"'dates/literature'\" unpacked with wrong size!
  125. fi
  126. # end of 'dates/literature'
  127. fi
  128. if test -f 'holidays.c' -a "${1}" != "-c" ; then 
  129.   echo shar: Will not clobber existing file \"'holidays.c'\"
  130. else
  131. echo shar: Extracting \"'holidays.c'\" \(11221 characters\)
  132. sed "s/^X//" >'holidays.c' <<'END_OF_FILE'
  133. X/*
  134. X * $Header: holidays.c,v 2.4 91/03/27 16:45:41 billr Exp $
  135. X */
  136. X/*
  137. X * holidays.c
  138. X *
  139. X * Author: Bill Randle, Tektronix, Inc. <billr@saab.CNA.TEK.COM>
  140. X *    (based on a test driver by R.P.C. Rodgers)
  141. X *
  142. X * Copyright (C) 1989, Tektronix, Inc.  All Rights Reserved
  143. X *
  144. X * Permission is hereby granted to use and modify this code in source
  145. X * or binary form as long as it is not sold for profit and this copyright
  146. X * notice remains intact.
  147. X */
  148. X/*
  149. X * functions from datelib (by R.P.C. Rodgers)
  150. X */
  151. X#include "ct.h"        /* for the NO_HOLIDAYS #define */
  152. X#ifndef NO_HOLIDAYS
  153. X
  154. X#include <sys/time.h>
  155. X
  156. Xdouble    election_day();            /* Secular US holidays */
  157. X
  158. Xdouble    autumn_equinox(),        /* Astronomical events */
  159. X    summer_solstice(),
  160. X    vernal_equinox(),
  161. X    winter_solstice();
  162. X
  163. Xdouble    ascension_day(),        /* Christian holidays */
  164. X    ash_wednesday(),
  165. X    corpus_christi(),
  166. X    easter(),
  167. X    easter_monday(),
  168. X    easter_offset(),
  169. X    first_sunday_advent(),
  170. X    first_sunday_lent(),
  171. X    fourth_sunday_lent(),
  172. X    good_friday(),
  173. X    maundy_thursday(),
  174. X    palm_sunday(),
  175. X    passion_sunday(),
  176. X    rogation_sunday(),
  177. X    septuagesima(),
  178. X    sexagesima(),
  179. X    quinquagesima(),
  180. X    second_sunday_lent(),
  181. X    shrove_monday(),
  182. X    shrove_tuesday(),
  183. X    third_sunday_lent(),
  184. X    trinity_sunday(),
  185. X    whitsunday();
  186. X
  187. Xdouble    islamic_new_year(),        /* Islamic holidays */
  188. X    muharram_9(),
  189. X    muharram_10(),
  190. X    muharram_16(),
  191. X    eid_i_milad_un_nabi(),
  192. X    jumada_al_akhir_23(),
  193. X    shab_e_miraj(),
  194. X    shab_e_barat(),
  195. X    shab_e_qadr(),
  196. X    ramadan(),
  197. X    eid_al_fitr(),
  198. X    dhul_hijja_9(),
  199. X    eid_al_adha(),
  200. X    ghadir();
  201. X
  202. Xdouble    chanukah(),            /* Jewish holidays */
  203. X    passover(),
  204. X    passover_offset(),
  205. X    purim(),
  206. X    rosh_hashanah(),
  207. X    shavuot(),
  208. X    simchat_torah(),
  209. X    sukkot(),
  210. X    yom_kippur();
  211. X
  212. Xextern struct tm current;    /* current day displayed from calentool */
  213. X#define NUM_ADATES    4
  214. X#define NUM_CDATES    22
  215. X#define NUM_IDATES    28
  216. X#define NUM_JDATES    8
  217. X#define NUM_SDATES    1
  218. X
  219. Xint    marked_note;
  220. Xint    gsave_year = -1;  /* indicates datelib initialized */
  221. Xstruct appt_entry a_appts[NUM_ADATES], c_appts[NUM_CDATES];
  222. Xstruct appt_entry i_appts[NUM_IDATES], j_appts[NUM_JDATES];
  223. Xstruct appt_entry s_appts[NUM_SDATES];
  224. X
  225. Xint
  226. Xa_dates(flag)
  227. Xint flag;
  228. X{
  229. X    static int save_year = -1;
  230. X
  231. X    /*
  232. X     * Astromonical Events
  233. X     */
  234. X    if (!flag || current.tm_year == save_year)
  235. X        return(NUM_ADATES);
  236. X    marked_note = flag - 1;
  237. X    if (current.tm_year != gsave_year) {
  238. X        datelib_init(current.tm_year+1900);
  239. X        gsave_year = current.tm_year;
  240. X    }
  241. X    save_year = current.tm_year;
  242. X    get_date(&a_appts[0], "Vernal Equinox", vernal_equinox, TRUE);
  243. X    get_date(&a_appts[1], "Summer Solstice", summer_solstice, TRUE);
  244. X    get_date(&a_appts[2], "Autumn Equinox", autumn_equinox, TRUE);
  245. X    get_date(&a_appts[3], "Winter Solstice", winter_solstice, TRUE);
  246. X    return(NUM_ADATES);
  247. X}
  248. X
  249. Xint
  250. Xc_dates(flag)
  251. Xint flag;
  252. X{
  253. X    static int save_year = -1;
  254. X
  255. X    /*
  256. X     * Christian holidays
  257. X     */
  258. X    if (!flag || current.tm_year == save_year)
  259. X        return(NUM_CDATES);
  260. X    marked_note = flag - 1;
  261. X    if (current.tm_year != gsave_year) {
  262. X        datelib_init(current.tm_year+1900);
  263. X        gsave_year = current.tm_year;
  264. X    }
  265. X    save_year = current.tm_year;
  266. X    get_date(&c_appts[0], "Septuagesima Sunday", septuagesima, FALSE);
  267. X    get_date(&c_appts[1], "Sexagesima Sunday", sexagesima, FALSE);
  268. X    get_date(&c_appts[2], "Quinquagesima Sunday", quinquagesima, FALSE);
  269. X    get_date(&c_appts[3], "Shrove Monday", shrove_monday, FALSE);
  270. X    get_date(&c_appts[4], "Shrove Tuesday (Mardi Gras)", shrove_tuesday, FALSE);
  271. X    get_date(&c_appts[5], "Ash Wednesday", ash_wednesday, FALSE);
  272. X    get_date(&c_appts[6], "First Sunday in Lent", first_sunday_lent, FALSE);
  273. X    get_date(&c_appts[7], "Second Sunday in Lent", second_sunday_lent, FALSE);
  274. X    get_date(&c_appts[8], "Third Sunday in Lent", third_sunday_lent, FALSE);
  275. X    get_date(&c_appts[9], "Fourth Sunday in Lent", fourth_sunday_lent, FALSE);
  276. X    get_date(&c_appts[10], "Passion Sunday", passion_sunday, FALSE);
  277. X    get_date(&c_appts[11], "Palm Sunday", palm_sunday, FALSE);
  278. X    get_date(&c_appts[12], "Maundy Thursday", maundy_thursday, FALSE);
  279. X    get_date(&c_appts[13], "Good Friday", good_friday, FALSE);
  280. X    get_date(&c_appts[14], "Easter", easter, FALSE);
  281. X    get_date(&c_appts[15], "Easter Monday (Canada)", easter_monday, FALSE);
  282. X    get_date(&c_appts[16], "Rogation Sunday", rogation_sunday, FALSE);
  283. X    get_date(&c_appts[17], "Ascension Day", ascension_day, FALSE);
  284. X    get_date(&c_appts[18], "Whitsunday", whitsunday, FALSE);
  285. X    get_date(&c_appts[19], "Trinity Sunday", trinity_sunday, FALSE);
  286. X    get_date(&c_appts[20], "Corpus Christi", corpus_christi, FALSE);
  287. X    get_date(&c_appts[21], "First Sunday in Advent", first_sunday_advent, FALSE);
  288. X    return(NUM_CDATES);
  289. X}
  290. X
  291. Xint
  292. Xi_dates(flag)
  293. Xint flag;
  294. X{
  295. X    int ndates;
  296. X    static int save_year = -1, i = 0;
  297. X    int get_idate();
  298. X
  299. X    /*
  300. X     * Islamic holidays
  301. X     */
  302. X    if (!flag || current.tm_year == save_year)
  303. X        return(i);
  304. X    marked_note = flag - 1;
  305. X    if (current.tm_year != gsave_year) {
  306. X        datelib_init(current.tm_year+1900);
  307. X        gsave_year = current.tm_year;
  308. X    }
  309. X    save_year = current.tm_year;
  310. X    i = 0;
  311. X    if (get_idate(&i_appts[i++],
  312. X        "Muharram 1, %d A.H.: Islamic New Year", islamic_new_year, 1) == 2)
  313. X        get_idate(&i_appts[i++],
  314. X            "Muharram 1, %d A.H.: Islamic New Year", islamic_new_year, 2);
  315. X    if (get_idate(&i_appts[i++],
  316. X        "Muharram 9, %d A.H.: Day of fasting", muharram_9, 1) == 2)
  317. X        get_idate(&i_appts[i++],
  318. X            "Muharram 9, %d A.H.: Day of fasting", muharram_9, 2);
  319. X    if (get_idate(&i_appts[i++],
  320. X        "Muharram 10, %d A.H.: Deliverance of Moses from the Pharoah (for Shia Islam, martyrdom of Husain)",
  321. X        muharram_10, 1) == 2)
  322. X        get_idate(&i_appts[i++],
  323. X            "Muharram 10, %d A.H.: Deliverance of Moses from the Pharoah (for Shia Islam, martyrdom of Husain)",
  324. X            muharram_10, 2);
  325. X    if (get_idate(&i_appts[i++],
  326. X        "Muharram 16, %d A.H. (Imamat Day; Ismaili Khoja)", muharram_16, 1) == 2)
  327. X        get_idate(&i_appts[i++],
  328. X            "Muharram 16, %d A.H. (Imamat Day; Ismaili Khoja)", muharram_16, 2);
  329. X    if (get_idate(&i_appts[i++],
  330. X        "Rabi I 12, %d A.H. (Eid-i-Milad-un-Nabi: The Prophet's Birthday)",
  331. X        eid_i_milad_un_nabi, 1) == 2)
  332. X        get_idate(&i_appts[i++],
  333. X            "Rabi I 12, %d A.H. (Eid-i-Milad-un-Nabi: The Prophet's Birthday)",
  334. X            eid_i_milad_un_nabi, 2);
  335. X    if (get_idate(&i_appts[i++],
  336. X        "Jumada al-Akhir 23, %d A.H. (Birth of Agha Khan IV, Ismaili)",
  337. X        jumada_al_akhir_23, 1) == 2)
  338. X        get_idate(&i_appts[i++],
  339. X            "Jumada al-Akhir 23, %d A.H. (Birth of Agha Khan IV, Ismaili)",
  340. X            jumada_al_akhir_23, 2);
  341. X    if (get_idate(&i_appts[i++],
  342. X        "Rajab 27, %d A.H. (Shab-e-Mi'raj: The Prophet's Ascension)",
  343. X        shab_e_miraj, 1) == 2)
  344. X        get_idate(&i_appts[i++],
  345. X            "Rajab 27, %d A.H. (Shab-e-Mi'raj: The Prophet's Ascension)",
  346. X            shab_e_miraj, 2);
  347. X    if (get_idate(&i_appts[i++],
  348. X        "Shaban 15, %d A.H. (Shab-e-Bara't: Night, followed by day of fasting)",
  349. X        shab_e_barat, 1) == 2)
  350. X        get_idate(&i_appts[i++],
  351. X            "Shaban 15, %d A.H. (Shab-e-Bara't: Night, followed by day of fasting)",
  352. X            shab_e_barat, 2);
  353. X    if (get_idate(&i_appts[i++],
  354. X        "Ramadan 1, %d A.H. (Fasting month begins)", ramadan, 1) == 2)
  355. X        get_idate(&i_appts[i++],
  356. X            "Ramadan 1, %d A.H. (Fasting month begins)", ramadan, 2);
  357. X    if (get_idate(&i_appts[i++],
  358. X        "Ramadan 27, %d A.H. (Shab-e-Qadr: Night vigil)", shab_e_qadr, 1) == 2)
  359. X        get_idate(&i_appts[i++],
  360. X            "Ramadan 27, %d A.H. (Shab-e-Qadr: Night vigil)", shab_e_qadr, 2);
  361. X    if (get_idate(&i_appts[i++],
  362. X        "Shawwal 1, %d A.H. (Eid-al-Fitr: Day of Feast)", eid_al_fitr, 1) == 2)
  363. X        get_idate(&i_appts[i++],
  364. X            "Shawwal 1, %d A.H. (Eid-al-Fitr: Day of Feast)", eid_al_fitr, 2);
  365. X    if (get_idate(&i_appts[i++],
  366. X        "Dhul-Hijj 9, %d A.H. (Day of Pilgrimage at Arafat, Mecca)",
  367. X        dhul_hijja_9, 1) == 2)
  368. X        get_idate(&i_appts[i++],
  369. X            "Dhul-Hijj 9, %d A.H. (Day of Pilgrimage at Arafat, Mecca)",
  370. X            dhul_hijja_9, 2);
  371. X    if (get_idate(&i_appts[i++],
  372. X        "Dhul-Hijj 10, %d A.H. (Eid-al-Azha: Day of Abraham's Sacrifice)",
  373. X        eid_al_adha, 1) == 2)
  374. X        get_idate(&i_appts[i++],
  375. X            "Dhul-Hijj 10, %d A.H. (Eid-al-Azha: Day of Abraham's Sacrifice)",
  376. X            eid_al_adha, 2);
  377. X    if (get_idate(&i_appts[i++],
  378. X        "Dhul-Hijj 18, %d A.H. (Ghadir: Ali's Nomination)", ghadir, 1) == 2)
  379. X        get_idate(&i_appts[i++],
  380. X            "Dhul-Hijj 18, %d A.H. (Ghadir: Ali's Nomination)", ghadir, 2);
  381. X    return(i);
  382. X}
  383. X
  384. Xint
  385. Xj_dates(flag)
  386. Xint flag;
  387. X{
  388. X    char buf[24];
  389. X    int jyear;
  390. X    static int save_year = -1;
  391. X
  392. X    /*
  393. X     * Jewish holidays
  394. X     */
  395. X    if (!flag || current.tm_year == save_year)
  396. X        return(NUM_JDATES);
  397. X    marked_note = flag - 1;
  398. X    if (current.tm_year != gsave_year) {
  399. X        datelib_init(current.tm_year+1900);
  400. X        gsave_year = current.tm_year;
  401. X    }
  402. X    save_year = current.tm_year;
  403. X    get_jdate(&j_appts[0], "Purim", purim);
  404. X    get_jdate(&j_appts[1], "First day of Passover (8 days)", passover);
  405. X    get_jdate(&j_appts[2], "Shavuot (2 days)", shavuot);
  406. X    get_jdate(&j_appts[3], "Rosh Hashanah (Jewish New Year) (2 days)", rosh_hashanah);
  407. X    get_jdate(&j_appts[4], "Yom Kippur", yom_kippur);
  408. X    get_jdate(&j_appts[5], "First day of Sukkot (9 days)", sukkot);
  409. X    get_jdate(&j_appts[6], "Simchat Torah", simchat_torah);
  410. X    get_jdate(&j_appts[7], "First day of Chanukah (8 days)", chanukah);
  411. X    return(NUM_JDATES);
  412. X}
  413. X
  414. Xint
  415. Xs_dates(flag)
  416. Xint flag;
  417. X{
  418. X    static int save_year = -1;
  419. X
  420. X    /*
  421. X     * SECULAR US HOLIDAYS
  422. X     * [Holidays specified as a given date (e.g. July 4) or as
  423. X     *  a known nth mday of a month (e.g. 2nd Monday) are not
  424. X     *  calculated here.  They are available from one of the
  425. X     *  auxillary date files.]
  426. X     */
  427. X    if (!flag || current.tm_year == save_year)
  428. X        return(NUM_SDATES);
  429. X    marked_note = flag - 1;
  430. X    if (current.tm_year != gsave_year) {
  431. X        datelib_init(current.tm_year+1900);
  432. X        gsave_year = current.tm_year;
  433. X    }
  434. X    save_year = current.tm_year;
  435. X    get_date(&s_appts[0], "Election Day", election_day, FALSE);
  436. X    return(NUM_SDATES);
  437. X}
  438. X
  439. X/*
  440. X * check for gregorian (i.e. US secular & Christian) holidays
  441. X */
  442. Xget_date(aptr, str, func, timeflag)
  443. Xstruct appt_entry *aptr;
  444. Xchar *str;
  445. Xdouble (*func)();
  446. Xint timeflag;
  447. X{
  448. X    double    hday;
  449. X    char     *julian_time();
  450. X
  451. X    hday = (*func)(current.tm_year+1900);
  452. X    fill_holiday(aptr, hday);
  453. X    strcpy(aptr->str, str);
  454. X    if (timeflag) {
  455. X        strcat(aptr->str, julian_time(hday));
  456. X        strcat(aptr->str, " GMT");
  457. X    }
  458. X}
  459. X
  460. X/*
  461. X * check for Islamic holidays
  462. X */
  463. Xint
  464. Xget_idate(aptr, str, func, which)
  465. Xstruct appt_entry *aptr;
  466. Xchar *str;
  467. Xint (*func)();
  468. Xint which;
  469. X{
  470. X    double    date1, date2;
  471. X    int    nr_dates, year1, year2;
  472. X
  473. X    (void)(*func)(current.tm_year+1900, &nr_dates, &date1, &date2, &year1, &year2);
  474. X    if (which == 1) {
  475. X        fill_holiday(aptr, date1);
  476. X        sprintf(aptr->str, str, year1);
  477. X    } else if (which == 2 && nr_dates == 2) {
  478. X        fill_holiday(aptr, date2);
  479. X        sprintf(aptr->str, str, year2);
  480. X    }
  481. X    return (nr_dates);
  482. X}
  483. X
  484. X/*
  485. X * check for Jewish holidays
  486. X */
  487. Xget_jdate(aptr, str, func)
  488. Xstruct appt_entry *aptr;
  489. Xchar *str;
  490. Xdouble (*func)();
  491. X{
  492. X    int    jyear;
  493. X    double    hday;
  494. X    char    buf[32];
  495. X
  496. X    hday = (*func)(current.tm_year+1900, &jyear);
  497. X    fill_holiday(aptr, hday);
  498. X    strcpy(aptr->str, str);
  499. X    sprintf(buf, " [Jewish year %d]", jyear);
  500. X    strcat(aptr->str, buf);
  501. X}
  502. X
  503. Xfill_holiday(aptr, hday)
  504. Xstruct appt_entry *aptr;
  505. Xdouble hday;
  506. X{
  507. X    int    month, year;
  508. X    double    day;
  509. X
  510. X    gregorian_date(&day, &month, &year, hday);
  511. X    aptr->year = current.tm_year;
  512. X    aptr->month = month - 1;
  513. X    aptr->day = (int)day;
  514. X    aptr->arrows = aptr->repeat = aptr->lookahead = 0;
  515. X    aptr->runlength = 0;
  516. X    aptr->warn = 10;
  517. X    aptr->flags = (A_NOTE | READONLY);
  518. X    if (marked_note)
  519. X        aptr->flags |= MARKED;
  520. X}
  521. X#endif    /* NO_HOLIDAYS */
  522. END_OF_FILE
  523. if test 11221 -ne `wc -c <'holidays.c'`; then
  524.     echo shar: \"'holidays.c'\" unpacked with wrong size!
  525. fi
  526. # end of 'holidays.c'
  527. fi
  528. if test -f 'month.cursor' -a "${1}" != "-c" ; then 
  529.   echo shar: Will not clobber existing file \"'month.cursor'\"
  530. else
  531. echo shar: Extracting \"'month.cursor'\" \(285 characters\)
  532. sed "s/^X//" >'month.cursor' <<'END_OF_FILE'
  533. X/* $Header: month.cursor,v 2.1 89/05/09 14:31:06 billr Exp $ */
  534. X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
  535. X */
  536. X        0x3FFC, 0x6006, 0xE007, 0x97E9, 0x8811, 0x9429, 0x9249, 0x9189,
  537. X        0x9189, 0x9249, 0x9429, 0x8811, 0x97E9, 0xE007, 0x6006, 0x3FFC
  538. END_OF_FILE
  539. if test 285 -ne `wc -c <'month.cursor'`; then
  540.     echo shar: \"'month.cursor'\" unpacked with wrong size!
  541. fi
  542. # end of 'month.cursor'
  543. fi
  544. if test -f 'notify.c' -a "${1}" != "-c" ; then 
  545.   echo shar: Will not clobber existing file \"'notify.c'\"
  546. else
  547. echo shar: Extracting \"'notify.c'\" \(32214 characters\)
  548. sed "s/^X//" >'notify.c' <<'END_OF_FILE'
  549. X/*
  550. X * $Header: notify.c,v 2.4 91/03/27 16:46:01 billr Exp $
  551. X */
  552. X/*
  553. X * notify.c
  554. X *
  555. X * Author: Philip Heller, Sun Microsystems. Inc. <terrapin!heller@sun.com>
  556. X *
  557. X * Original source Copyright (C) 1987, Sun Microsystems, Inc.
  558. X *    All Rights Reserved
  559. X * Permission is hereby granted to use and modify this program in source
  560. X * or binary form as long as it is not sold for profit and this copyright
  561. X * notice remains intact.
  562. X *
  563. X *
  564. X * Changes/additions by: Bill Randle, Tektronix, Inc. <billr@saab.CNA.TEK.COM>
  565. X *
  566. X * Changes and additions Copyright (C) 1988, 1989, 1991 Tektronix, Inc.
  567. X *    All Rights Reserved
  568. X * Permission is hereby granted to use and modify the modifications in source
  569. X * or binary form as long as they are not sold for profit and this copyright
  570. X * notice remains intact.
  571. X */
  572. X/**********************************************************
  573. X *                              *
  574. X *     These are the notify routines which are invoked  *
  575. X * by events in the control panel subwindow,and the      *
  576. X * various popup window panels.                  *
  577. X *                              *
  578. X **********************************************************/
  579. X
  580. X
  581. X
  582. X#include <stdio.h>
  583. X#include <suntool/sunview.h>
  584. X#include <suntool/canvas.h>
  585. X#include <suntool/panel.h>
  586. X#include <suntool/menu.h>
  587. X#include "ct.h"
  588. X
  589. Xextern int monday_first;
  590. Xextern int mainsw_state, nr_weekdays, day_is_open;
  591. Xextern int dayslot_width, nr_weekdays;
  592. Xextern struct tm today, current;
  593. Xextern Cursor month_cursor, week_cursor, day_cursor, year_cursor;
  594. Xextern Pixfont *font;
  595. Xextern Frame frame;
  596. Xextern Panel panel;
  597. Xextern Canvas canvas;
  598. Xextern Pixwin *main_pixwin;
  599. Xextern Menu next_menu, previous_menu, year_menu, month_menu;
  600. Xextern Menu day_menu, week_menu, current_menu;
  601. Xextern Menu done_menu;
  602. Xextern Frame fframe;
  603. Xextern Panel_item repeat_pi, remind_pi, daysel_pi;
  604. Xextern Panel_item everyx_pi, whichwk_pi, marked_pi;
  605. Xextern Panel_item del_choice_pi, setdate_pi;
  606. Xextern Panel_item runl_pi, advw_pi;
  607. X#ifndef NO_SUN_MOON
  608. Xextern Frame mframe, sframe;
  609. Xextern Panel_item moonbutton_pi, sunbutton_pi;
  610. X#endif
  611. Xextern Frame fileframe;
  612. Xextern Panel_item filename_pi, file_ro_pi;
  613. X#ifndef NO_PRINTER
  614. Xextern Panel_item prcmd_pi, prfile_pi;
  615. Xextern int print_to_file;
  616. Xextern Frame prframe;
  617. Xextern Menu print_menu;
  618. X#endif
  619. Xextern Frame prompt_frame, date_frame;
  620. Xextern struct appt_entry future[];
  621. Xextern struct dayslot *slots;
  622. Xextern int attr_bi;  /* index into currently active day slot */
  623. Xextern int new_entry;
  624. Xextern struct tm olddate;
  625. Xextern int otherfile, read_only;
  626. Xextern char *othername, apts_pathname[], orig_apts_pathname[];
  627. Xextern int orig_ro;
  628. Xextern char printer[];
  629. Xextern int show_future;
  630. Xextern int show_time;
  631. Xextern int update_interval;
  632. Xextern struct appt_entry shelf_appt;
  633. Xextern int day_first;
  634. Xextern void close_frame();
  635. Xextern Notify_value leave();
  636. X
  637. Xint i;
  638. X
  639. X
  640. Xvoid
  641. Xdonebutton_notify(item, event)
  642. XPanel_item item;
  643. XEvent *event;
  644. X{
  645. X    if (event_id(event) == MS_LEFT) {
  646. X        /* close to icon */
  647. X        close_frame();
  648. X    } else
  649. X        panel_default_handle_event(item, event);
  650. X}
  651. X
  652. Xvoid
  653. Xdone_menu_event(item, event)
  654. XPanel_item item;
  655. XEvent *event;
  656. X{
  657. X    int value;
  658. X
  659. X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
  660. X        value = (int) menu_show(done_menu, panel, event, 0);
  661. X        if (value == 1)
  662. X            /* close frame */
  663. X            close_frame();
  664. X        else if (value == 2)
  665. X            /* quit tool */
  666. X            (void)leave((Notify_client)0, 0, (Notify_signal_mode)0);
  667. X    } else
  668. X        panel_default_handle_event(item, event);
  669. X}
  670. X
  671. Xvoid
  672. Xweekbutton_notify(item, event)
  673. XPanel_item item;
  674. XEvent *event;
  675. X{
  676. X    if (event_id(event) == MS_LEFT) {
  677. X        switch (mainsw_state) {
  678. X            case DISPLAYING_DAY:
  679. X                close_day();
  680. X                break;
  681. X            case DISPLAYING_WEEK:
  682. X                return;
  683. X            case DISPLAYING_MONTH:
  684. X                /* first week in month */
  685. X                current.tm_mday = 1;
  686. X                first_wkday();
  687. X                break;
  688. X            case DISPLAYING_YEAR:
  689. X                /* first week in year */
  690. X                current.tm_mday = 1;
  691. X                current.tm_mon = JAN;
  692. X                first_wkday();
  693. X                break;
  694. X        }
  695. X        mainsw_state = DISPLAYING_WEEK;
  696. X        draw_week();
  697. X        window_set(canvas, WIN_CURSOR, week_cursor, 0);
  698. X    } else
  699. X        panel_default_handle_event(item, event);
  700. X}
  701. X
  702. X
  703. Xvoid
  704. Xweek_menu_event(item, event)
  705. XPanel_item item;
  706. XEvent *event;
  707. X{
  708. X    int value, i;
  709. X    Menu_item an_item;
  710. X
  711. X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
  712. X        if (mainsw_state > DISPLAYING_MONTH) {
  713. X            /* make all entries inactive */
  714. X            for (i=1; i<=6; i++) {
  715. X                an_item = menu_get(week_menu, MENU_NTH_ITEM, i);
  716. X                menu_set(an_item, MENU_INACTIVE, TRUE, 0);
  717. X            }
  718. X        } else {
  719. X            /* make all entries active */
  720. X            for (i=1; i<=6; i++) {
  721. X                an_item = menu_get(week_menu, MENU_NTH_ITEM, i);
  722. X                menu_set(an_item, MENU_INACTIVE, FALSE, 0);
  723. X            }
  724. X        }
  725. X        value = (int) menu_show(week_menu, panel, event, 0);
  726. X        if (value > 0) {
  727. X            current.tm_mday = (value - 1) * 7 + 1;
  728. X            if (current.tm_mday > monthlength(current.tm_mon))
  729. X                current.tm_mday = monthlength(current.tm_mon);
  730. X            if (mainsw_state == DISPLAYING_DAY)
  731. X                close_day();
  732. X            if (mainsw_state != DISPLAYING_WEEK) {
  733. X                mainsw_state = DISPLAYING_WEEK;
  734. X                window_set(canvas, WIN_CURSOR, week_cursor, 0);
  735. X            }
  736. X            draw_week();
  737. X        }
  738. X    } else
  739. X        panel_default_handle_event(item, event);
  740. X}
  741. X
  742. Xlastmonth()
  743. X{
  744. X
  745. X    current.tm_mon -= 1;
  746. X    current.tm_mday = 1;
  747. X    draw_month();
  748. X}
  749. X
  750. Xnextmonth()
  751. X{ 
  752. X    current.tm_mon += 1;
  753. X    current.tm_mday = 1;
  754. X        draw_month();
  755. X} 
  756. X
  757. Xvoid
  758. Xmonthmenu_notify(item, event)  
  759. XPanel_item item;  
  760. XEvent *event;
  761. X{  
  762. X    int i, j, new_day;
  763. X
  764. X    if (event_id(event) == MS_LEFT) {
  765. X        if (mainsw_state == DISPLAYING_YEAR)
  766. X            /* go to first month of year */
  767. X            current.tm_mon = JAN;
  768. X        current.tm_mday = 1;
  769. X        if (mainsw_state == DISPLAYING_DAY)
  770. X            close_day();
  771. X        if (mainsw_state != DISPLAYING_MONTH) {
  772. X            mainsw_state = DISPLAYING_MONTH;
  773. X            window_set(canvas, WIN_CURSOR, month_cursor, 0);
  774. X        }
  775. X        draw_month();
  776. X    } else
  777. X        panel_default_handle_event(item, event);
  778. X}
  779. X
  780. Xvoid
  781. Xmonth_menu_event(item, event)
  782. XPanel_item item;
  783. XEvent *event;
  784. X{
  785. X    int value;
  786. X
  787. X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
  788. X        value = (int) menu_show(month_menu, panel, event, 0);
  789. X        if (value > 0) {
  790. X            current.tm_mday = 1;
  791. X            current.tm_mon = value - 1;
  792. X            if (mainsw_state == DISPLAYING_DAY)
  793. X                close_day();
  794. X            if (mainsw_state != DISPLAYING_MONTH) {
  795. X                mainsw_state = DISPLAYING_MONTH;
  796. X                window_set(canvas, WIN_CURSOR, month_cursor, 0);
  797. X            }
  798. X            draw_month();
  799. X        }
  800. X    } else
  801. X        panel_default_handle_event(item, event);
  802. X}
  803. X
  804. X
  805. Xlastyear()
  806. X{
  807. X    current.tm_mday = 1;
  808. X    current.tm_mon = JAN;
  809. X    current.tm_year -= 1;
  810. X    draw_year();
  811. X}
  812. X
  813. Xnextyear()
  814. X{
  815. X    current.tm_mday = 1;
  816. X    current.tm_mon = JAN;
  817. X    current.tm_year += 1;
  818. X    draw_year();
  819. X}
  820. X
  821. Xvoid
  822. Xyearmenu_notify(item, event)
  823. XPanel_item item;
  824. XEvent *event;
  825. X{
  826. X    int old_state;
  827. X
  828. X    if (event_id(event) == MS_LEFT) {
  829. X        if (mainsw_state == DISPLAYING_DAY) 
  830. X            close_day(); 
  831. X        old_state = mainsw_state;
  832. X        mainsw_state = DISPLAYING_YEAR; 
  833. X        draw_year(); 
  834. X        if (old_state != DISPLAYING_YEAR)
  835. X            window_set(canvas, WIN_CURSOR, year_cursor, 0);
  836. X    } else
  837. X        panel_default_handle_event(item, event);
  838. X} 
  839. X
  840. Xvoid
  841. Xyear_menu_event(item, event)
  842. XPanel_item item;
  843. XEvent *event;
  844. X{
  845. X    int value, old_state;
  846. X
  847. X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
  848. X        value = (int) menu_show(year_menu, panel, event, 0);
  849. X        if (value > 0) {
  850. X            current.tm_year = START_YEAR + value - 1;
  851. X            if (mainsw_state == DISPLAYING_DAY) 
  852. X                close_day(); 
  853. X            old_state = mainsw_state;
  854. X            mainsw_state = DISPLAYING_YEAR; 
  855. X            draw_year(); 
  856. X            if (old_state != DISPLAYING_YEAR)
  857. X                window_set(canvas, WIN_CURSOR, year_cursor, 0);
  858. X        }
  859. X    } else
  860. X        panel_default_handle_event(item, event);
  861. X}
  862. X
  863. X
  864. Xlastweek()
  865. X{
  866. X    if (mainsw_state == DISPLAYING_DAY) {
  867. X        close_day();
  868. X        current.tm_mday -= 7;
  869. X        draw_day();
  870. X    } else if (mainsw_state == DISPLAYING_WEEK) {
  871. X        current.tm_mday -= 7;
  872. X        draw_week();
  873. X    }
  874. X}
  875. X
  876. X
  877. Xnextweek()
  878. X{
  879. X        if (mainsw_state == DISPLAYING_DAY) {
  880. X                close_day();
  881. X        current.tm_mday += 7;
  882. X                draw_day();
  883. X        } else if (mainsw_state == DISPLAYING_WEEK) {
  884. X        current.tm_mday += 7;
  885. X                draw_week();
  886. X    }
  887. X}
  888. X
  889. X
  890. X
  891. Xyesterday()
  892. X{
  893. X    if (mainsw_state != DISPLAYING_DAY)
  894. X        return(0);
  895. X    close_day();
  896. X    current.tm_mday--;
  897. X    draw_day();
  898. X    return(1);
  899. X}
  900. X
  901. X
  902. Xvoid
  903. Xtodaybutton_notify(item, event)
  904. XPanel_item item;
  905. XEvent *event;
  906. X{
  907. X    if (event_id(event) == MS_LEFT) {
  908. X        if (mainsw_state == DISPLAYING_DAY)
  909. X            close_day();
  910. X        else {
  911. X            mainsw_state = DISPLAYING_DAY;
  912. X            window_set(canvas, WIN_CURSOR, day_cursor, 0);
  913. X        }
  914. X        get_today();
  915. X        current = today;
  916. X        draw_day();
  917. X    } else
  918. X        panel_default_handle_event(item, event);
  919. X}
  920. X
  921. X
  922. X
  923. Xtomorrow()
  924. X{ 
  925. X        if (mainsw_state != DISPLAYING_DAY)
  926. X                return(0);
  927. X        close_day(); 
  928. X    current.tm_mday++;
  929. X        draw_day(); 
  930. X    return(1);
  931. X} 
  932. X
  933. Xvoid
  934. Xcurrentbutton_notify(item, event)
  935. XPanel_item item;
  936. XEvent *event;
  937. X{
  938. X    if (event_id(event) == MS_LEFT) {
  939. X        if (mainsw_state == DISPLAYING_DAY)
  940. X            close_day();
  941. X        get_today();
  942. X        current = today;
  943. X        switch (mainsw_state) {
  944. X            case DISPLAYING_DAY:
  945. X                draw_day();
  946. X                break;
  947. X            case DISPLAYING_WEEK:
  948. X                draw_week();
  949. X                break;
  950. X            case DISPLAYING_MONTH:
  951. X                draw_month();
  952. X                break;
  953. X            case DISPLAYING_YEAR:
  954. X                draw_year();
  955. X                break;
  956. X        }
  957. X    } else
  958. X        panel_default_handle_event(item, event);
  959. X}
  960. X
  961. Xvoid
  962. Xcurrent_menu_event(item, event)
  963. XPanel_item item;
  964. XEvent *event;
  965. X{
  966. X    Menu_item an_item;
  967. X    char date[9];
  968. X    int value, rtn;
  969. X    struct tm Save;
  970. X
  971. X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
  972. X        value = (int) menu_show(current_menu, panel, event, 0);
  973. X        if (value == 0)
  974. X            return;    /* no selection made */
  975. X        if (mainsw_state == DISPLAYING_DAY)
  976. X            close_day();
  977. X        get_today();
  978. X        Save = current;
  979. X        current = today;
  980. X        switch (value) {
  981. X            case 1:    /* current day */
  982. X                mainsw_state = DISPLAYING_DAY;
  983. X                window_set(canvas, WIN_CURSOR, day_cursor, 0);
  984. X                draw_day();
  985. X                break;
  986. X
  987. X            case 2:    /* current week */
  988. X                mainsw_state = DISPLAYING_WEEK;
  989. X                window_set(canvas, WIN_CURSOR, week_cursor, 0);
  990. X                draw_week();
  991. X                break;
  992. X
  993. X            case 3:    /* current month */
  994. X                mainsw_state = DISPLAYING_MONTH;
  995. X                window_set(canvas, WIN_CURSOR, month_cursor, 0);
  996. X                draw_month();
  997. X                break;
  998. X
  999. X            case 4:    /* current year */
  1000. X                mainsw_state = DISPLAYING_YEAR;
  1001. X                window_set(canvas, WIN_CURSOR, year_cursor, 0);
  1002. X                draw_year();
  1003. X                break;
  1004. X
  1005. X            case 5:    /* change date */
  1006. X                if (day_first)
  1007. X                    sprintf(date, "%d/%d/%02d", Save.tm_mday, Save.tm_mon+1, Save.tm_year);
  1008. X                else
  1009. X                    sprintf(date, "%d/%d/%02d", Save.tm_mon+1, Save.tm_mday, Save.tm_year);
  1010. X                panel_set_value(setdate_pi, date);
  1011. X                do {
  1012. X                    window_loop(date_frame);
  1013. X                    /* change "current" date to reflect entry */
  1014. X                    rtn = parse_date((char *)panel_get_value(setdate_pi), FALSE);
  1015. X                } while (rtn);
  1016. X                mainsw_state = DISPLAYING_DAY;
  1017. X                window_set(canvas, WIN_CURSOR, day_cursor, 0);
  1018. X                draw_day();
  1019. X                break;
  1020. X        }
  1021. X    } else
  1022. X        panel_default_handle_event(item, event);
  1023. X}
  1024. X
  1025. X/*
  1026. X * notifier for set date frame "Done" button
  1027. X */
  1028. Xvoid
  1029. Xdtdone_proc(item, event)
  1030. XPanel_item item;
  1031. XEvent *event;
  1032. X{
  1033. X    if (event_id(event) == MS_LEFT)
  1034. X        window_return(0);
  1035. X}
  1036. X
  1037. X/* "done" from subframe menu of change date frame */
  1038. Xvoid
  1039. Xdtframe_done(frame)
  1040. XFrame frame;
  1041. X{
  1042. X    window_set(date_frame, WIN_SHOW, FALSE, 0);
  1043. X}
  1044. X
  1045. Xvoid
  1046. Xdaybutton_notify(item, event)
  1047. XPanel_item item;
  1048. XEvent *event;
  1049. X{
  1050. X    if (event_id(event) == MS_LEFT) {
  1051. X        switch (mainsw_state) {
  1052. X            case DISPLAYING_DAY:
  1053. X                /* no change */
  1054. X                return;
  1055. X            case DISPLAYING_WEEK:
  1056. X                /* pick first day in week */
  1057. X                while (current.tm_wday != SUN) {
  1058. X                    current.tm_mday--;
  1059. X                    current.tm_wday--;
  1060. X                }
  1061. X                if (nr_weekdays < 7)
  1062. X                    /* start with MON */
  1063. X                    current.tm_mday++;
  1064. X                break;
  1065. X            case DISPLAYING_MONTH:
  1066. X                /* pick first day in month */
  1067. X                current.tm_mday = 1;
  1068. X                first_wkday();
  1069. X                break;
  1070. X            case DISPLAYING_YEAR:
  1071. X                /* pick first day in year */
  1072. X                current.tm_mon = JAN;
  1073. X                current.tm_mday = 1;
  1074. X                first_wkday();
  1075. X                break;
  1076. X        }
  1077. X        mainsw_state = DISPLAYING_DAY;
  1078. X        draw_day();
  1079. X        window_set(canvas, WIN_CURSOR, day_cursor, 0);
  1080. X    } else
  1081. X        panel_default_handle_event(item, event);
  1082. X}
  1083. X
  1084. Xvoid
  1085. Xday_menu_event(item, event)
  1086. XPanel_item item;
  1087. XEvent *event;
  1088. X{
  1089. X    int value, i;
  1090. X    Menu_item an_item;
  1091. X
  1092. X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
  1093. X        if (mainsw_state > DISPLAYING_WEEK) {
  1094. X            /* make all entries inactive */
  1095. X            for (i=1; i<=7; i++) {
  1096. X                an_item = menu_get(day_menu, MENU_NTH_ITEM, i);
  1097. X                menu_set(an_item, MENU_INACTIVE, TRUE, 0);
  1098. X            }
  1099. X        } else {
  1100. X            /* make all entries active */
  1101. X            for (i=1; i<=7; i++) {
  1102. X                an_item = menu_get(day_menu, MENU_NTH_ITEM, i);
  1103. X                menu_set(an_item, MENU_INACTIVE, FALSE, 0);
  1104. X            }
  1105. X        }
  1106. X        value = (int) menu_show(day_menu, panel, event, 0);
  1107. X        if (value > 0) {
  1108. X            /* find selected day in this week */
  1109. X            if (monday_first) {
  1110. X                ++value;
  1111. X                if (value == 7) value = 0;
  1112. X            }
  1113. X            if (--value > current.tm_wday)
  1114. X                current.tm_mday += value - current.tm_wday;
  1115. X            else
  1116. X                current.tm_mday -= current.tm_wday - value;
  1117. X            mainsw_state = DISPLAYING_DAY;
  1118. X            draw_day();
  1119. X            window_set(canvas, WIN_CURSOR, day_cursor, 0);
  1120. X        }
  1121. X    } else
  1122. X        panel_default_handle_event(item, event);
  1123. X}
  1124. X
  1125. Xfirst_wkday()
  1126. X{
  1127. X    /*
  1128. X     * Set day to first displayable day of the week selected.
  1129. X     * If we have a 7-day week display, then it will always
  1130. X     * be the first day of the month. If we have a 5 or 6 day
  1131. X     * display, the first day may need to be adjusted to the
  1132. X     * following monday.
  1133. X     */
  1134. X    if (nr_weekdays == 7)
  1135. X        /* it's ok as is */
  1136. X        return;
  1137. X    fix_current_day();    /* update wkday, etc. */
  1138. X    if (current.tm_wday == SUN)
  1139. X        current.tm_mday++;
  1140. X    else if (current.tm_wday > nr_weekdays)
  1141. X        current.tm_mday += 7 - current.tm_wday + 1;
  1142. X}
  1143. X
  1144. Xvoid
  1145. Xnext_menu_event(item, event)
  1146. XPanel_item item;
  1147. XEvent *event;
  1148. X{
  1149. X    Menu_item an_item;
  1150. X    int value;
  1151. X
  1152. X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
  1153. X        i = 0;
  1154. X        while (++i < mainsw_state) {
  1155. X            an_item = menu_get(next_menu, MENU_NTH_ITEM, i);
  1156. X            menu_set(an_item, MENU_INACTIVE, TRUE, 0);
  1157. X        }
  1158. X        for (i=mainsw_state; i<=DISPLAYING_YEAR; i++) {
  1159. X            an_item = menu_get(next_menu, MENU_NTH_ITEM, i);
  1160. X            menu_set(an_item, MENU_INACTIVE, FALSE, 0);
  1161. X        }
  1162. X        value = (int) menu_show(next_menu, panel, event, 0);
  1163. X        if (value == 0)
  1164. X            return;    /* no selection made */
  1165. X        value--;
  1166. X        switch (mainsw_state) {
  1167. X            case DISPLAYING_DAY:
  1168. X                switch (value) {
  1169. X                    case 0:    /* day */
  1170. X                        tomorrow();
  1171. X                        break;
  1172. X                    case 1: /* week */
  1173. X                        close_day();
  1174. X                        current.tm_mday += 7;
  1175. X                        draw_day();
  1176. X                        break;
  1177. X                    case 2:    /* month */
  1178. X                        close_day();
  1179. X                        current.tm_mon++;
  1180. X                        /* make sure day ends up in proper month */
  1181. X                        if (current.tm_mday == monthlength(current.tm_mon-1))
  1182. X                            /* last day of month */
  1183. X                            current.tm_mday = monthlength(current.tm_mon%12);
  1184. X                        else if (current.tm_mday > monthlength(current.tm_mon%12))
  1185. X                            current.tm_mday = monthlength(current.tm_mon%12);
  1186. X                        draw_day();
  1187. X                        break;
  1188. X                    case 3: /* year */
  1189. X                        close_day();
  1190. X                        current.tm_year++;
  1191. X                        draw_day();
  1192. X                        break;
  1193. X                }
  1194. X                break;
  1195. X            case DISPLAYING_WEEK:
  1196. X                switch (value) {
  1197. X                    case 1:    /* week */
  1198. X                        nextweek();
  1199. X                        break;
  1200. X                    case 2:    /* month */
  1201. X                        current.tm_mon++;
  1202. X                        draw_week();
  1203. X                        break;
  1204. X                    case 3:    /* year */
  1205. X                        current.tm_year++;
  1206. X                        draw_week();
  1207. X                        break;
  1208. X                }
  1209. X                break;
  1210. X            case DISPLAYING_MONTH:
  1211. X                switch (value) {
  1212. X                    case 2: /* month */
  1213. X                        nextmonth();
  1214. X                        break;
  1215. X                    case 3:    /* year */
  1216. X                        current.tm_year++;
  1217. X                        draw_month();
  1218. X                        break;
  1219. X                }
  1220. X                break;
  1221. X            case DISPLAYING_YEAR:
  1222. X                if (value == 3)
  1223. X                    nextyear();
  1224. X                break;
  1225. X        }
  1226. X    } else
  1227. X        panel_default_handle_event(item, event);
  1228. X}
  1229. X
  1230. Xvoid
  1231. Xnextbutton_notify(item, event) 
  1232. XPanel_item item; 
  1233. XEvent *event; 
  1234. X{ 
  1235. X    if (event_id(event) == MS_LEFT) {
  1236. X        switch (mainsw_state) {
  1237. X            case DISPLAYING_DAY:
  1238. X                tomorrow();
  1239. X                break;
  1240. X            case DISPLAYING_WEEK:
  1241. X                nextweek();
  1242. X                break;
  1243. X            case DISPLAYING_MONTH:
  1244. X                nextmonth();
  1245. X                break;
  1246. X            case DISPLAYING_YEAR:
  1247. X                nextyear();
  1248. X                break;
  1249. X        }
  1250. X    } else
  1251. X        panel_default_handle_event(item, event);
  1252. X}
  1253. X
  1254. Xvoid
  1255. Xprevious_menu_event(item, event)
  1256. XPanel_item item;
  1257. XEvent *event;
  1258. X{
  1259. X    Menu_item an_item;
  1260. X    int value;
  1261. X
  1262. X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
  1263. X        i = 0;
  1264. X        while (++i < mainsw_state) {
  1265. X            an_item = menu_get(previous_menu, MENU_NTH_ITEM, i);
  1266. X            menu_set(an_item, MENU_INACTIVE, TRUE, 0);
  1267. X        }
  1268. X        for (i=mainsw_state; i<=DISPLAYING_YEAR; i++) {
  1269. X            an_item = menu_get(previous_menu, MENU_NTH_ITEM, i);
  1270. X            menu_set(an_item, MENU_INACTIVE, FALSE, 0);
  1271. X        }
  1272. X        value = (int) menu_show(previous_menu, panel, event, 0);
  1273. X        if (value == 0)
  1274. X            return;    /* no selection made */
  1275. X        value--;
  1276. X        switch (mainsw_state) {
  1277. X            case DISPLAYING_DAY:
  1278. X                switch (value) {
  1279. X                    case 0:    /* day */
  1280. X                        yesterday();
  1281. X                        break;
  1282. X                    case 1: /* week */
  1283. X                        close_day();
  1284. X                        current.tm_mday -= 7;
  1285. X                        draw_day();
  1286. X                        break;
  1287. X                    case 2:    /* month */
  1288. X                        close_day();
  1289. X                        current.tm_mon--;
  1290. X                        /* make sure day ends up in proper month */
  1291. X                        if (current.tm_mday == monthlength(current.tm_mon+1))
  1292. X                            /* last day of month */
  1293. X                            current.tm_mday = monthlength((current.tm_mon+12)%12);
  1294. X                        else if (current.tm_mday > monthlength((current.tm_mon+12)%12))
  1295. X                            current.tm_mday = monthlength((current.tm_mon+12)%12);
  1296. X                        draw_day();
  1297. X                        break;
  1298. X                    case 3: /* year */
  1299. X                        close_day();
  1300. X                        current.tm_year--;
  1301. X                        draw_day();
  1302. X                        break;
  1303. X                }
  1304. X                break;
  1305. X            case DISPLAYING_WEEK:
  1306. X                switch (value) {
  1307. X                    case 1:    /* week */
  1308. X                        lastweek();
  1309. X                        break;
  1310. X                    case 2:    /* month */
  1311. X                        current.tm_mon--;
  1312. X                        draw_week();
  1313. X                        break;
  1314. X                    case 3:    /* year */
  1315. X                        current.tm_year--;
  1316. X                        draw_week();
  1317. X                        break;
  1318. X                }
  1319. X                break;
  1320. X            case DISPLAYING_MONTH:
  1321. X                switch (value) {
  1322. X                    case 2: /* month */
  1323. X                        lastmonth();
  1324. X                        break;
  1325. X                    case 3:    /* year */
  1326. X                        current.tm_year--;
  1327. X                        draw_month();
  1328. X                        break;
  1329. X                }
  1330. X                break;
  1331. X            case DISPLAYING_YEAR:
  1332. X                if (value == 3)
  1333. X                    lastyear();
  1334. X                break;
  1335. X        }
  1336. X    } else {
  1337. X        panel_default_handle_event(item, event);
  1338. X    }
  1339. X}
  1340. X
  1341. Xvoid
  1342. Xprevious_menu_notify(item, event)
  1343. XPanel_item item; 
  1344. XEvent *event; 
  1345. X{ 
  1346. X    if (event_id(event) == MS_LEFT) {
  1347. X        switch (mainsw_state) {
  1348. X            case DISPLAYING_DAY:
  1349. X                yesterday();
  1350. X                break;
  1351. X            case DISPLAYING_WEEK:
  1352. X                lastweek();
  1353. X                break;
  1354. X            case DISPLAYING_MONTH:
  1355. X                lastmonth();
  1356. X                break;
  1357. X            case DISPLAYING_YEAR:
  1358. X                lastyear();
  1359. X                break;
  1360. X        }
  1361. X    } else
  1362. X        panel_default_handle_event(item, event);
  1363. X}
  1364. X
  1365. X#ifndef NO_SUN_MOON
  1366. Xvoid
  1367. Xmoonbutton_notify(item, event) 
  1368. XPanel_item item; 
  1369. XEvent *event; 
  1370. X{ 
  1371. X    if (event_id(event) == MS_LEFT) {
  1372. X        /* display popup frame with moon data */
  1373. X        moon_data_frame();
  1374. X        panel_set(moonbutton_pi, PANEL_SHOW_ITEM, FALSE, 0);
  1375. X    } else
  1376. X        panel_default_handle_event(item, event);
  1377. X}
  1378. X
  1379. Xvoid
  1380. Xsunbutton_notify(item, event) 
  1381. XPanel_item item; 
  1382. XEvent *event; 
  1383. X{ 
  1384. X    if (event_id(event) == MS_LEFT) {
  1385. X        /* display popup frame with moon data */
  1386. X        sun_data_frame();
  1387. X        panel_set(sunbutton_pi, PANEL_SHOW_ITEM, FALSE, 0);
  1388. X    } else
  1389. X        panel_default_handle_event(item, event);
  1390. X}
  1391. X#endif
  1392. X
  1393. XNotify_value
  1394. Xmyframe_interposer(client, event, arg, type)
  1395. XNotify_client client;
  1396. XEvent *event;
  1397. XNotify_arg arg;
  1398. XNotify_event_type type;
  1399. X{
  1400. X    static int start_up = 1;
  1401. X    int closed_initial, closed_current;
  1402. X    Notify_value value;
  1403. X    void sframe_done(), mframe_done();
  1404. X
  1405. X    /* get initial state */
  1406. X    closed_initial = (int)window_get(frame, FRAME_CLOSED);
  1407. X    /* let the frame do its thing */
  1408. X    value = notify_next_event_func(client, event, arg, type);
  1409. X    /* get new state */
  1410. X    closed_current = (int)window_get(frame, FRAME_CLOSED);
  1411. X    if (start_up) {
  1412. X        /* first time thru */
  1413. X        start_up = 0;
  1414. X        if (closed_initial)
  1415. X            /* starting up iconic */
  1416. X            olddate = current;
  1417. X        else
  1418. X            /* starting up open */
  1419. X            if (mainsw_state == DISPLAYING_DAY)
  1420. X                /* create future appt popup */
  1421. X                draw_future_appts();
  1422. X    } else if (closed_current != closed_initial) {
  1423. X        /* it changed state - either opened or closed */
  1424. X        if (closed_current) {
  1425. X            /* frame just closed */
  1426. X            close_frame();
  1427. X        } else {
  1428. X            /* frame just opened */
  1429. X            /*
  1430. X             * redraw display in case the "today" changed
  1431. X             * and a different day needs to be highlighted
  1432. X             */
  1433. X            if (day_is_open)
  1434. X                close_day();
  1435. X            current = olddate;
  1436. X            switch (mainsw_state) {
  1437. X                case DISPLAYING_DAY:
  1438. X                    draw_day1();
  1439. X                    /* create future popup next time thru */
  1440. X                    start_up = 1;
  1441. X                    break;
  1442. X                case DISPLAYING_WEEK:
  1443. X                    draw_week();
  1444. X                    break;
  1445. X                case DISPLAYING_MONTH:
  1446. X                    draw_month();
  1447. X                    break;
  1448. X                case DISPLAYING_YEAR:
  1449. X                    draw_year();
  1450. X                    break;
  1451. X            }
  1452. X        }
  1453. X    }
  1454. X
  1455. X    return(NOTIFY_DONE);
  1456. X}
  1457. X
  1458. X/*
  1459. X * notifier for "Done" button in the popup future appt frame
  1460. X */
  1461. Xvoid
  1462. Xfdone_proc(item, event)
  1463. XPanel_item item;
  1464. XEvent *event;
  1465. X{
  1466. X    if (event_id(event) == MS_LEFT) {
  1467. X        window_destroy(fframe);
  1468. X        fframe = 0;
  1469. X        show_future = 0;
  1470. X    }
  1471. X}
  1472. X
  1473. X/*
  1474. X * notifier for "Keep" button in the popup future appt frame
  1475. X */
  1476. Xvoid
  1477. Xfkeep_proc(item, event)
  1478. XPanel_item item;
  1479. XEvent *event;
  1480. X{
  1481. X    if (event_id(event) == MS_LEFT) {
  1482. X        window_destroy(fframe);
  1483. X        fframe = 0;
  1484. X    }
  1485. X}
  1486. X
  1487. X/*
  1488. X * Notifier for future appts. We get here when the user
  1489. X * selects one of the displayed messages. When this happens,
  1490. X * the day display for the selected future appt is displayed.
  1491. X */
  1492. Xvoid
  1493. Xfappt_notify(item, event)
  1494. XPanel_item item;
  1495. XEvent *event;
  1496. X{
  1497. X    int value;
  1498. X
  1499. X    if (event_id(event) != MS_LEFT)
  1500. X        return;
  1501. X    
  1502. X    value = (int)panel_get(item, PANEL_CLIENT_DATA);
  1503. X    /* set current date to match the selected appt */
  1504. X    current.tm_year = future[value].year;
  1505. X    current.tm_mon = future[value].month;
  1506. X    current.tm_mday = future[value].day;
  1507. X    fix_current_day();
  1508. X
  1509. X    /* draw new day page */
  1510. X    draw_day();
  1511. X}
  1512. X
  1513. X/*
  1514. X * Notify routine for everyx panel item in the attributes
  1515. X * popup window. In this routine, we only care about the state
  1516. X * of the "Selected Week" choice, which determines which panel
  1517. X * item is displayed.
  1518. X */
  1519. Xvoid
  1520. Xeveryx_notify(item, event)
  1521. XPanel_item item;
  1522. XEvent *event;
  1523. X{
  1524. X    int value;
  1525. X
  1526. X    value = (int) panel_get_value(everyx_pi);
  1527. X    if (value & 0x4) {
  1528. X        if (value & 0x3) {
  1529. X            /* not allowed for ALL_DAYS or EVERY_MON_FRI */
  1530. X            value &= ~0x4;
  1531. X            panel_set_value(everyx_pi, value);
  1532. X        } else {
  1533. X            panel_set(repeat_pi, PANEL_SHOW_ITEM, FALSE, 0);
  1534. X            panel_set(whichwk_pi, PANEL_SHOW_ITEM, TRUE, 0);
  1535. X        }
  1536. X    } else {
  1537. X        panel_set(whichwk_pi, PANEL_SHOW_ITEM, FALSE, 0);
  1538. X        panel_set(repeat_pi, PANEL_SHOW_ITEM, TRUE, 0);
  1539. X    }
  1540. X}
  1541. X
  1542. X/*
  1543. X * Notify routine for the appointment attributes popup window.
  1544. X * Since each panel item does not have its own notify routine,
  1545. X * we check the current state of everything when the user
  1546. X * selects the accept button and set the slot flags appropriately.
  1547. X */
  1548. Xvoid
  1549. Xattr_accept(item, event)
  1550. XPanel_item item;
  1551. XEvent *event;
  1552. X{
  1553. X    int value, flag = 0, repeat = 0;
  1554. X    int oflag;
  1555. X    struct appt_entry *apt = slots[attr_bi].cur_appt;
  1556. X
  1557. X    if (event_id(event) != MS_LEFT)
  1558. X        return;  /* ignore everything else */
  1559. X    
  1560. X    oflag = apt->flags;
  1561. X
  1562. X    /* get the everyx value (every day, week, month, year) */
  1563. X    value = (int) panel_get_value(everyx_pi);
  1564. X    /* value is bitmap of selected choices */
  1565. X    /* EVERY_MON_FRI and ALL_DAYS are mutually exclusive */
  1566. X    if (value & 0x1)
  1567. X        flag |= EVERY_MON_FRI;
  1568. X    else if (value & 0x2)
  1569. X        flag |= ALL_DAYS;
  1570. X    else if (oflag & (EVERY_MON_FRI|ALL_DAYS))
  1571. X        apt->day = current.tm_mday;
  1572. X    if (value & 0x4)
  1573. X        flag |= Setday(current.tm_wday);
  1574. X    else if (oflag & EVERY_SOMEDAY)
  1575. X        apt->day = current.tm_mday;
  1576. X    if (value & 0x8)
  1577. X        flag |= ALL_MONTHS;
  1578. X    else if (oflag & ALL_MONTHS)
  1579. X        apt->month = current.tm_mon;
  1580. X    if (value & 0x10)
  1581. X        flag |= ALL_YEARS;
  1582. X    else if (oflag & ALL_YEARS)
  1583. X        apt->year = current.tm_year;
  1584. X    
  1585. X    if (value & 0x4) {
  1586. X        /* repeat at week intervals selected by which week pi */
  1587. X        value = (int) panel_get_value(whichwk_pi);
  1588. X        if (value == 0 || value == 0x40)
  1589. X            /* ALL selected or no selection */
  1590. X            value = ALL_WEEKS;
  1591. X        flag |= REPEAT;
  1592. X        repeat = value;
  1593. X    } else {
  1594. X        /* get repeat interval */
  1595. X        value = atoi((char *)panel_get_value(repeat_pi));
  1596. X        if (value > 0) {
  1597. X            flag |= REPEAT;
  1598. X            repeat = value;
  1599. X        }
  1600. X    }
  1601. X
  1602. X    /* get lookahead value */
  1603. X    value = atoi((char *)panel_get_value(remind_pi));
  1604. X    if (value > 0) {
  1605. X        flag |= LOOKAHEAD;
  1606. X        if (apt->lookahead != value) {
  1607. X            new_entry = 1;
  1608. X            apt->lookahead = value;
  1609. X        }
  1610. X    }
  1611. X
  1612. X    /* get runlength value */
  1613. X    value = atoi((char *)panel_get_value(runl_pi));
  1614. X    if (value > 0) {
  1615. X        flag |= RUN;
  1616. X        if (apt->runlength != value) {
  1617. X            new_entry = 1;
  1618. X            apt->runlength = value;
  1619. X        }
  1620. X    }
  1621. X
  1622. X    /* get advance warning value */
  1623. X    value = atoi((char *)panel_get_value(advw_pi));
  1624. X    if (apt->warn != value) {
  1625. X        new_entry = 1;
  1626. X        apt->warn = value;
  1627. X    }
  1628. X
  1629. X    if (oflag & A_NOTE) {
  1630. X        flag |= A_NOTE;
  1631. X        /* marked indicator */
  1632. X        value = (int) panel_get_value(marked_pi);
  1633. X        if (value == 1)
  1634. X            flag |= MARKED;  /* don't show in month/yr display */
  1635. X    }
  1636. X    /* shouldn't really be in this routine if the appt
  1637. X     * was read only, however, this is still here for potential
  1638. X     * future use.
  1639. X     */
  1640. X    if (oflag & READONLY)
  1641. X        flag |= READONLY;
  1642. X
  1643. X    if (apt->repeat != repeat || oflag != flag)
  1644. X        new_entry = 1;    /* something changed */
  1645. X
  1646. X    /* set the slot info */
  1647. X    apt->repeat = repeat;
  1648. X    apt->flags = flag;
  1649. X
  1650. X    window_return(0);
  1651. X}
  1652. X
  1653. X/*
  1654. X * abort the attribute setting process, leaving the current
  1655. X * appointment unmodified.
  1656. X */
  1657. Xvoid
  1658. Xattr_abort(item, event)
  1659. XPanel_item item;
  1660. XEvent *event;
  1661. X{
  1662. X    if (event_id(event) == MS_LEFT)
  1663. X        window_return(0);
  1664. X}
  1665. X
  1666. X/*
  1667. X * Notify routine for the delete mode popup window.
  1668. X * Since the panel item does not have its own notify routine,
  1669. X * we check the current state when the user
  1670. X * selects the done button and set the slot flags appropriately.
  1671. X */
  1672. Xvoid
  1673. Xdel_done(item, event)
  1674. XPanel_item item;
  1675. XEvent *event;
  1676. X{
  1677. X    int value;
  1678. X    struct appt_entry tmp;
  1679. X
  1680. X    if (event_id(event) != MS_LEFT)
  1681. X        return;  /* ignore everything else */
  1682. X    
  1683. X    value = (int) panel_get_value(del_choice_pi);
  1684. X    if (value == 0) {
  1685. X        /* don't show it today */
  1686. X        /* create duplicate entry with delete flag set */
  1687. X        tmp = *slots[attr_bi].cur_appt;
  1688. X        tmp.flags &= ~(ALL_YEARS|ALL_MONTHS|ALL_DAYS|EVERY_SOMEDAY|REPEAT|EVERY_MON_FRI|RUN);
  1689. X        tmp.flags |= DELETED;
  1690. X        tmp.year = current.tm_year;
  1691. X        tmp.month = current.tm_mon;
  1692. X        tmp.day = current.tm_mday;
  1693. X        add_to_slot(attr_bi, &tmp, TRUE);
  1694. X        /* in the case of "cut", modify the shelf appt */
  1695. X        if ((int)panel_get(del_choice_pi, PANEL_CLIENT_DATA)) {
  1696. X            shelf_appt.flags &= ~(ALL_YEARS|ALL_MONTHS|ALL_DAYS|EVERY_SOMEDAY|REPEAT|EVERY_MON_FRI|RUN);
  1697. X            shelf_appt.year = current.tm_year;
  1698. X            shelf_appt.month = current.tm_mon;
  1699. X            shelf_appt.day = current.tm_mday;
  1700. X        }
  1701. X    } else {
  1702. X        /* completely kill appt */
  1703. X        cut_delete(attr_bi);
  1704. X    }
  1705. X    new_entry = 1;
  1706. X
  1707. X    window_return(0);
  1708. X}
  1709. X
  1710. X#ifndef NO_SUN_MOON
  1711. X/*
  1712. X * notifier for "Done" button in the popup sun data frame
  1713. X */
  1714. Xvoid
  1715. Xsdone_proc(item, event)
  1716. XPanel_item item;
  1717. XEvent *event;
  1718. X{
  1719. X    if (event_id(event) == MS_LEFT) {
  1720. X        window_destroy(sframe);
  1721. X        sframe = 0;
  1722. X        panel_set(sunbutton_pi, PANEL_SHOW_ITEM, TRUE, 0);
  1723. X    }
  1724. X}
  1725. X
  1726. X/*
  1727. X * notifier for "Done" button in the popup moon data frame
  1728. X */
  1729. Xvoid
  1730. Xmdone_proc(item, event)
  1731. XPanel_item item;
  1732. XEvent *event;
  1733. X{
  1734. X    if (event_id(event) == MS_LEFT) {
  1735. X        window_destroy(mframe);
  1736. X        mframe = 0;
  1737. X        panel_set(moonbutton_pi, PANEL_SHOW_ITEM, TRUE, 0);
  1738. X    }
  1739. X}
  1740. X
  1741. X/* "done" from subframe menu */
  1742. Xvoid
  1743. Xsframe_done(frame)
  1744. XFrame frame;
  1745. X{
  1746. X    window_destroy(sframe);
  1747. X    sframe = 0;
  1748. X    panel_set(sunbutton_pi, PANEL_SHOW_ITEM, TRUE, 0);
  1749. X}
  1750. X
  1751. X/* "done" from subframe menu */
  1752. Xvoid
  1753. Xmframe_done(frame)
  1754. XFrame frame;
  1755. X{
  1756. X    window_destroy(mframe);
  1757. X    mframe = 0;
  1758. X    panel_set(moonbutton_pi, PANEL_SHOW_ITEM, TRUE, 0);
  1759. X}
  1760. X#endif    /* NO_SUN_MOON */
  1761. X
  1762. X/*
  1763. X * notifier for file button in main control panel
  1764. X */
  1765. Xvoid
  1766. Xfilebutton_notify(item, event)
  1767. XPanel_item item;
  1768. XEvent *event;
  1769. X{
  1770. X    if (event_id(event) == MS_LEFT) {
  1771. X        panel_set_value(filename_pi, apts_pathname);
  1772. X        panel_set_value(file_ro_pi, (read_only ? 0 : 1));
  1773. X        window_set(fileframe, WIN_SHOW, TRUE, 0);
  1774. X    } else
  1775. X        panel_default_handle_event(item, event);
  1776. X}
  1777. X
  1778. X/*
  1779. X * notifier for "Done" button in the popup file frame
  1780. X */
  1781. Xvoid
  1782. Xfile_done(item, event)
  1783. XPanel_item item;
  1784. XEvent *event;
  1785. X{
  1786. X    if (event_id(event) == MS_LEFT)
  1787. X        window_set(fileframe, WIN_SHOW, FALSE, 0);
  1788. X}
  1789. X
  1790. X/*
  1791. X * notifier for "Accept" button in the popup file frame
  1792. X */
  1793. Xvoid
  1794. Xfile_accept(item, event)
  1795. XPanel_item item;
  1796. XEvent *event;
  1797. X{
  1798. X    char save_name[160];
  1799. X    int save_ro;
  1800. X    struct tm save_date;
  1801. X
  1802. X    if (event_id(event) == MS_LEFT) {
  1803. X            save_date = current;
  1804. X        /* cleanup existing appts file and open new one */
  1805. X        strcpy(save_name, apts_pathname);
  1806. X        save_ro = read_only;
  1807. X        cleanup();
  1808. X        othername = (char *)panel_get_value(filename_pi);
  1809. X        otherfile = 1;
  1810. X        read_only = ((int)panel_get_value(file_ro_pi) == 0 ? 1 : 0);
  1811. X        if (do_files(TRUE)) {
  1812. X            /* error in opening new file - restore old */
  1813. X            othername = save_name;
  1814. X            read_only = save_ro;
  1815. X            if (do_files(TRUE))
  1816. X                /* can't restore original */
  1817. X                err_rpt("can't restore appts file", FATAL);
  1818. X        } else {
  1819. X            /* read_only may have been changed by do_files() */
  1820. X            panel_set_value(file_ro_pi, (read_only ? 0 : 1));
  1821. X                    current = save_date;
  1822. X            switch(mainsw_state) {
  1823. X                case DISPLAYING_DAY:
  1824. X                    draw_day();
  1825. X                    break;
  1826. X                case DISPLAYING_WEEK:
  1827. X                    draw_week();
  1828. X                    break;
  1829. X                case DISPLAYING_MONTH:
  1830. X                    draw_month();
  1831. X                    break;
  1832. X                case DISPLAYING_YEAR:
  1833. X                    draw_year();
  1834. X                    break;
  1835. X            }
  1836. X        }
  1837. X    }
  1838. X}
  1839. X
  1840. X/*
  1841. X * notifier for "Reset" button in the popup file frame
  1842. X */
  1843. Xvoid
  1844. Xfile_reset(item, event)
  1845. XPanel_item item;
  1846. XEvent *event;
  1847. X{
  1848. X    if (event_id(event) == MS_LEFT)
  1849. X        panel_set_value(filename_pi, apts_pathname);
  1850. X}
  1851. X
  1852. X/*
  1853. X * notifier for "Save" button in the popup file frame
  1854. X */
  1855. Xvoid
  1856. Xfile_save(item, event)
  1857. XPanel_item item;
  1858. XEvent *event;
  1859. X{
  1860. X    if (event_id(event) == MS_LEFT) {
  1861. X        othername = (char *)panel_get_value(filename_pi);
  1862. X        if (!strcmp(othername, apts_pathname)) {
  1863. X            /* no filename change */
  1864. X            if (mainsw_state == DISPLAYING_DAY && day_is_open)
  1865. X                close_day();
  1866. X        }
  1867. X    }
  1868. X}
  1869. X
  1870. X/*
  1871. X * notifier for "Original" button in the popup file frame
  1872. X */
  1873. Xvoid
  1874. Xfile_orig(item, event)
  1875. XPanel_item item;
  1876. XEvent *event;
  1877. X{
  1878. X    if (event_id(event) == MS_LEFT) {
  1879. X        panel_set_value(filename_pi, orig_apts_pathname);
  1880. X        panel_set_value(file_ro_pi, (orig_ro ? 0 : 1));
  1881. X        /* force an Accept button event */
  1882. X        file_accept(item, event);
  1883. X    }
  1884. X}
  1885. X
  1886. X/*
  1887. X * "Done" from subframe menu of the file selection popup frame
  1888. X */
  1889. Xvoid
  1890. Xfileframe_done(frame)
  1891. XFrame frame;
  1892. X{
  1893. X    window_set(fileframe, WIN_SHOW, FALSE, 0);
  1894. X}
  1895. X
  1896. X/*
  1897. X * notifier for prompt frame "No" button
  1898. X */
  1899. Xvoid
  1900. Xprompt_no_notify(item, event)
  1901. XPanel_item item;
  1902. XEvent *event;
  1903. X{
  1904. X    if (event_id(event) == MS_LEFT)
  1905. X        window_return(1);
  1906. X}
  1907. X
  1908. X/*
  1909. X * notifier for prompt frame "Yes" or "Ok" button
  1910. X */
  1911. Xvoid
  1912. Xprompt_yes_notify(item, event)
  1913. XPanel_item item;
  1914. XEvent *event;
  1915. X{
  1916. X    if (event_id(event) == MS_LEFT)
  1917. X        window_return(0);
  1918. X}
  1919. X
  1920. X#ifndef NO_PRINTER
  1921. X/*
  1922. X * notifier for "Print" button in main control panel
  1923. X */
  1924. Xvoid
  1925. Xprintbutton_notify(item, event)
  1926. XPanel_item item;
  1927. XEvent *event;
  1928. X{
  1929. X    int prt_fmt;
  1930. X
  1931. X    if (event_id(event) == MS_LEFT) {
  1932. X#ifdef RASTER_ONLY
  1933. X        /* default to printing a raster file */
  1934. X        print_calendar(PR_RASTER);
  1935. X#else
  1936. X        /* default to printing a postscript file */
  1937. X        print_calendar(PR_POSTSCRIPT);
  1938. X#endif
  1939. X    } else if (event_id(event) == MS_RIGHT) {
  1940. X        /* print selected format */
  1941. X        if ((prt_fmt = (int) panel_get(item, PANEL_CLIENT_DATA)) <= 2)
  1942. X            print_calendar(prt_fmt);
  1943. X    } else
  1944. X        panel_default_handle_event(item, event);
  1945. X}
  1946. X
  1947. Xvoid
  1948. Xprint_menu_event(item, event)
  1949. XPanel_item item;
  1950. XEvent *event;
  1951. X{
  1952. X    int value;
  1953. X#ifdef RASTER_ONLY
  1954. X    Menu_item an_item;
  1955. X#endif
  1956. X
  1957. X    if (event_id(event) == MS_RIGHT && event_is_down(event)) {
  1958. X#ifdef RASTER_ONLY
  1959. X        an_item = menu_get(print_menu, MENU_NTH_ITEM, PR_POSTSCRIPT);
  1960. X        menu_set(an_item, MENU_INACTIVE, TRUE, 0);
  1961. X#endif
  1962. X        value = (int) menu_show(print_menu, panel, event, 0);
  1963. X        if (value > 0) {
  1964. X            panel_set(item, PANEL_CLIENT_DATA, value, 0);
  1965. X            if (value == 3) {
  1966. X                /* change printer */
  1967. X                panel_set_value(prfile_pi, print_to_file);
  1968. X                panel_set_value(prcmd_pi, printer);
  1969. X                window_set(prframe, WIN_SHOW, TRUE, 0);
  1970. X            } else {
  1971. X                panel_begin_preview(item, event);
  1972. X                panel_accept_preview(item, event);
  1973. X            }
  1974. X        }
  1975. X    } else
  1976. X        panel_default_handle_event(item, event);
  1977. X}
  1978. X
  1979. Xvoid
  1980. Xprdone_proc(item, event)
  1981. XPanel_item item;
  1982. XEvent *event;
  1983. X{
  1984. X    char *newstr;
  1985. X    /**
  1986. X    int status = 0;
  1987. X    **/
  1988. X
  1989. X    if (event_id(event) == MS_LEFT) {
  1990. X        newstr = (char *) panel_get_value(prcmd_pi);
  1991. X        print_to_file = (int) panel_get_value(prfile_pi);
  1992. X        window_set(prframe, WIN_SHOW, FALSE, 0);
  1993. X        if (strcmp(printer, newstr)) {
  1994. X            /* the string changed */
  1995. X            strcpy(printer, newstr);
  1996. X            /******
  1997. X             * writing to the defaults file doesn't work.
  1998. X             *
  1999. X             * create_prompt_frame("Printer changed - overwrite .defaults entry?", TRUE);
  2000. X             * if (!window_loop(prompt_frame))
  2001. X             *     defaults_set_string("/CalenTool/Printer", printer, &status);
  2002. X             *****/
  2003. X        }
  2004. X    }
  2005. X}
  2006. X
  2007. Xvoid
  2008. Xprframe_done(frame)
  2009. XFrame frame;
  2010. X{
  2011. X    /* mark as no change */
  2012. X    window_set(prframe, WIN_SHOW, FALSE, 0);
  2013. X}
  2014. X#endif    /* NO_PRINTER */
  2015. END_OF_FILE
  2016. if test 32214 -ne `wc -c <'notify.c'`; then
  2017.     echo shar: \"'notify.c'\" unpacked with wrong size!
  2018. fi
  2019. # end of 'notify.c'
  2020. fi
  2021. echo shar: End of archive 12 \(of 23\).
  2022. cp /dev/null ark12isdone
  2023. MISSING=""
  2024. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ; do
  2025.     if test ! -f ark${I}isdone ; then
  2026.     MISSING="${MISSING} ${I}"
  2027.     fi
  2028. done
  2029. if test "${MISSING}" = "" ; then
  2030.     echo You have unpacked all 23 archives.
  2031.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2032. else
  2033.     echo You still need to unpack the following archives:
  2034.     echo "        " ${MISSING}
  2035. fi
  2036. ##  End of shell archive.
  2037. exit 0
  2038.  
  2039. exit 0 # Just in case...
  2040. -- 
  2041. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  2042. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  2043. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  2044. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  2045.